package process

import "fmt"

//因为UserMgr 有且只有一个
//并在很多地方都会使用到
//所以定义其为一个全局便两个

var (
	UserMgr *userMgr
)

type userMgr struct {
	onlineUsers map[int]*UserProcess
}

func init() {
	UserMgr = &userMgr{
		onlineUsers: make(map[int]*UserProcess, 512),
	}
}

//添加相当于更改 因为map里添加 相当于 顶替
func (um *userMgr) AddOnlineUser(up *UserProcess) {
	um.onlineUsers[up.UserId] = up
}

//删除

func (um *userMgr) DelOnlineUser(userId int) {
	delete(um.onlineUsers, userId)
}

//获取所有
func (um *userMgr) GetAllOnlineUser() map[int]*UserProcess {
	return um.onlineUsers
}

//根据UserId 返回相应的值
func (um *userMgr) GetOnlineUserById(userId int) (up *UserProcess, err error) {
	//如何从map中取出一个值  带检测的方式
	up, ok := um.onlineUsers[userId]
	if !ok { //说明你要找的用户是不在线的 没有在map存储连接
		err = fmt.Errorf("用户 %d 不存在", userId)
		return
	}
	return
}
